import request from '@/utils/request'

/**
 * 创建待办事项
 * @param {Object} data
 * @param {string} data.content - 待办事项内容
 * @param {number[]} data.labels - 分类标签ID数组
 * @returns {Promise}
 */
export function createTodo(data) {
  return request({
    url: '/todo-item/create',
    method: 'post',
    data,
  })
}

/**
 * 获取展示中的待办事项列表（按标签分组）
 * @returns {Promise}
 */
export function getShownTodos() {
  return request({
    url: '/todo-item/get-shown',
    method: 'get',
  })
}

/**
 * 获取已完成的待办事项列表（按标签分组）
 * @returns {Promise}
 */
export function getCompletedTodos() {
  return request({
    url: '/todo-item/get-completed',
    method: 'get',
  })
}

// 获取待办事项列表
export function getTodoList(params) {
  return request({
    url: '/todo-item/list',
    method: 'get',
    params,
  })
}

// 更新待办事项
export function updateTodo(data) {
  return request({
    url: '/todo-item/update',
    method: 'post',
    data,
  })
}

// 删除待办事项
export function removeTodo(data) {
  return request({
    url: '/todo-item/remove',
    method: 'get',
    params: data,
  })
}

/**
 * 更新已完成待办项的标签排序
 * @param {Object} data
 * @param {number} data.labelId - 标签ID
 * @param {Array<number>} data.todoItemIds - 排序后的待办项ID数组
 * @returns {Promise}
 */
export function updateCompletedSort(data) {
  return request({
    url: '/todo-item/update-completed-sort',
    method: 'post',
    data,
  })
}

/**
 * 更新未完成待办项的排序
 * @param {Object} data
 * @param {number} data.labelId - 标签ID
 * @param {Array<number>} data.todoItemIds - 排序后的待办项ID数组
 * @returns {Promise}
 */
export function updateShowSort(data) {
  return request({
    url: '/todo-item/update-show-sort',
    method: 'post',
    data,
  })
}

/**
 * 获取回收站中的已删除待办事项
 * @returns {Promise}
 */
export function getDeletedTodos() {
  return request({
    url: '/todo-item/get-deleted',
    method: 'get',
  })
}

/**
 * 恢复已删除的待办事项
 * @param {Object} data
 * @param {number} data.id - 待办事项ID
 * @returns {Promise}
 */
export function restoreDeletedTodo(data) {
  return request({
    url: '/todo-item/recover',
    method: 'get',
    params: data,
  })
}
